"use strict";

var _dec, _class;

/* 
学习装饰器语法
*/

/* 
https://caniuse.com/?search=Decorator

*/

/* 
Targtet 就是我们装饰器修饰的这个类 装饰器的底层转换类似如下：

T = T(Person);


*/
function T(prefix) {
  return function (Targtet) {
    /* 可以对这个类进行扩充形成 对象的原型的方法和属性 */
    Targtet.prototype.type = 'human';

    Targtet.prototype.say = function () {
      console.log(prefix + ' say hello ');
    };
    /* 扩展静态的属性和方法 */


    Targtet.isType = 'Person Human';

    Targtet.fn = function () {
      console.log('fn call...');
    };
  };
}
/* 装饰器语法上面的@函数，返回值是一个函数 */
// 工厂装饰器：一个装饰器函数的返回值是一个函数，就是装饰器工厂


let Person = (_dec = T('[-_-]'), _dec(_class = class Person {}) || _class);
const p1 = new Person();
console.log(p1);
console.log('对象的属性和方法的调用');
console.log(p1.type);
p1.say();
console.log('类的静态属性和方法的调用');
console.log(Person.isType);
Person.fn();